﻿#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//1.预处理阶段（主要是文本操作）
//1.1 #include头文件的包含
//1.2 #define定义符号的替换，删除定义的符号
//1.3 注释的删除
//.....

//2.编译阶段
//把C语言代码转换成汇编代码

//3.汇编阶段
//把汇编代码转换成二进制指令
//形成符号表

//4.链接阶段
//4.1合并段表
//4.2符号表的合并和重定位



// 3. 预处理详解

// 3.1 预定义符号
//__FILE__      //进行编译的源文件
//__LINE__     //文件当前的行号
//__DATE__    //文件被编译的日期
//__TIME__    //文件被编译的时间
//__STDC__    //如果编译器遵循ANSI C，其值为1，否则未定义

/*
int main()
{
	FILE* pf = fopen("log.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return EXIT_FAILURE;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		fprintf(pf, "file:%s line=%d date:%s time:%s i=%d\n", __FILE__, __LINE__, __DATE__, __TIME__, i);
	}
	fclose(pf);
	pf = NULL;

	return 0;
}
*/



// 3.2 #define

// 3.2.1 #define 定义标识符

/*
#define MAX 1000
#define reg register          //为 register这个关键字，创建一个简短的名字
#define do_forever for(;;)     //用更形象的符号来替换一种实现
#define CASE break;case        //在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长，可以分成几行写，除了最后一行外，每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf("file:%s\tline:%d\t \
                          date:%s\ttime:%s\n" ,\
                          __FILE__,__LINE__ ,\
                          __DATE__,__TIME__ )  
*/

// 3.2.2 定义宏


